package main

import (
	"fmt"
	"reflect"
	"strconv"
	"strings"
	"unicode/utf8"
)

// 获取长度
func A1() {
	var v1 string
	v1 = "小小很小"
	fmt.Println(len(v1))
	// 获取字节长度
	fmt.Println(utf8.RuneCountInString(v1))
}

// 是否以 xx 开头 或 xx结尾
func A2() {
	var v1 string
	v1 = "小小很小"
	result := strings.HasPrefix(v1, "小")
	result_1 := strings.HasSuffix(v1, "小")
	fmt.Println(result, result_1)
}

// 是否包含
func A3() {
	var v1 string
	v1 = "小小很小"
	result := strings.Contains(v1, "无")
	fmt.Println(result)
}

// 变成大写/小写
func A4() {
	// 被赋值的key存储的是大写， 原来的函数还是小写
	var v1 string
	v1 = "qazwsxedc"
	v2 := "QAZWSXEDC"
	result := strings.ToUpper(v1)
	fmt.Println(result)
	resultq := strings.ToLower(v2)
	fmt.Println(resultq)
}

// 去两边
func A5() {
	var v1 string
	v1 = "小小很小"
	result1 := strings.TrimRight(v1, "小")
	result2 := strings.TrimLeft(v1, "小")
	result3 := strings.Trim(v1, "小")
	fmt.Println(result1, result2, result3)
}

// 替换
func A6() {
	var v1 string
	v1 = "小小很小"
	// 从左到右检索， 替换的个数等于最后的数字， -1代表替换所有
	result1 := strings.Replace(v1, "小", "山岭", 1)
	result2 := strings.Replace(v1, "小", "山岭", 2)
	result3 := strings.Replace(v1, "小", "山岭", -1)
	fmt.Println(result1, result2, result3)
}

// 分割
func A7() {
	var v1 string
	v1 = "吃葡萄不吐葡萄皮"
	// 使用葡萄分割字符串
	result := strings.Split(v1, "葡萄")

	fmt.Println(result)
}

// 拼接
func A8() {
	// 不建议的方式
	massage := "我爱" + "北京天安门"
	fmt.Println(massage)

	//第一种方式 使用切片
	var v1 = []string{"我弟家", "在东北"}
	result := strings.Join(v1, "-")
	fmt.Println(result)

	// 第二种方式 效率最高
	var v2 strings.Builder
	v2.WriteString("你")
	v2.WriteString("我")
	v2.WriteString("他")
	resulta := v2.String()
	fmt.Println(resulta)
}

// 字符串与整型之间转换
func A9() {
	var v1 string
	v1 = "888"
	result, _ := strconv.Atoi(v1)
	fmt.Println(result, reflect.TypeOf(result))

	result1 := strconv.Itoa(result)
	fmt.Println(result1, reflect.TypeOf(result1))
}

// 通过字符串对应的字节赋值
func A10() {
	var v1 string
	v1 = string(65)
	fmt.Println(v1)
}
